# -*- coding: utf-8 -*-
from planificacion.ListenCPU import ListenCPU
from queue import Queue

class Scheduler():
###############################################################################################################

    # INICIALIZACION
    pcbt = {}   # tabla de pcb, diseñada como diccionario
                #pid = clave, pcb = valor
    def __init__(self,aPolitic, manager): # por defecto el valor es 0
        self.politica = aPolitic
        self.politica.setManager(manager)
        self.ready = Queue()
        self.listen = ListenCPU()
        self.listen.addOyente(aPolitic)
    
###############################################################################################################

    # METODOS   
    def currentTask(self):
        # Recupera la tarea actualmente activa
        return self.politica.actualTask()

    def nextTask(self):
        # Configurar la tarea actualmente en activo como listo (o matar) y traer la tarea siguiente,
        #  también, establecer esa tarea como la que actualmente activa 
        return self.politica.nextTask()

    def addTask(self, aTask):
        # Agrega una tarea al Scheduler
        self.politica.addTask(aTask)
        
    def killTask(self):
        # Elimina la tarea actualmente activa
        self.politica.killTask()
    
    def hasNext(self):
        # Pregunta si existe una siguiente tarea
        return self.politica.hasNext()
    
    
###############################################################################################################

    #GET&SET  

    def getPCBT(self):
        return self.pcbt
    def getReady (self):
        return self.politica.getReady ()
    def setReady(self, ready):
        self.politica.setReady(ready)